extends RayCast2D

# 攻击参数
@export var attack_range: float = 300.0  # 攻击范围
@export var attack_interval: float = 1.0  # 攻击间隔（秒）
@export var attack_damage: int = 1  # 伤害值

@onready var bullet_line = $Line2D 
# 内部变量
var attack_timer: Timer = Timer.new()
var current_target: Node2D = null
var show_bullet: bool = false
var bullet_timer: float = 0.0
# 子弹样式配置
@export var bullet_color: Color = Color(1, 0, 0)  # 子弹颜色（红色）
@export var bullet_width: float = 2.0             # 子弹线宽
@export var bullet_duration: float = 0.1    

func _ready():
	# 配置射线

	
	# 配置线段（子弹样式）
	bullet_line.width = bullet_width
	bullet_line.default_color = bullet_color
	bullet_line.visible = false  # 默认隐藏
	
	# 配置攻击计时器
	attack_timer.wait_time = attack_interval
	attack_timer.one_shot = false
	attack_timer.timeout.connect(perform_attack)
	add_child(attack_timer)
	attack_timer.start(2.0)

func _process(delta):
	# 控制子弹显示时长
	pass

func _physics_process(delta):
	pass
	

# 寻找范围内的目标
func find_target():
	current_target = null
	var closest_distance = attack_range + 1
	var self_global = global_position  # 缓存自身全局坐标，避免重复获取
	
	# 先获取组内所有敌人
	var all_enemies = get_tree().get_nodes_in_group("mods")
	# 只遍历数量有限的敌人（如果组内敌人太多，可先限制最大检查数量）
	var max_check_count = 20  # 最多检查20个敌人
	var checked_count = 0
	
	for enemy in all_enemies:
		# 限制循环次数，超过后跳出
		checked_count += 1
		if checked_count > max_check_count:
			break
			
		# 跳过已删除的敌人
		if enemy.is_queued_for_deletion():
			continue
			
		# 先做粗略的轴对齐距离判断（比精确sqrt的distance_to更快）
		var dx = abs(enemy.global_position.x - self_global.x)
		var dy = abs(enemy.global_position.y - self_global.y)
		
		# 快速排除除明显超出范围的敌人（x或y方向超出攻击范围）
		if dx > attack_range or dy > attack_range:
			continue
			
		# 对可能在范围内的敌人，计算精确距离
		var distance = self_global.distance_to(enemy.global_position)
		if distance < attack_range and distance < closest_distance:
			closest_distance = distance
			current_target = enemy
			print("发现目标")

# 执行攻击（射线检测）
func perform_attack():
	find_target()
	
	# 如果有目标，射线指向目标
	if current_target:
		target_position = current_target.global_position - global_position
		#look_at(current_target.global_position)  # 角色朝向目标
		
	if not current_target:
		return
	# 发射射线
	force_raycast_update()
	show_bullet_effect()
	# 如果射线命中目标
	
	if is_colliding() and get_collider():
		# 对目标造成伤害
		#if current_target.has_method("take_damage"):
			#current_target.take_damage(attack_damage)
		  # 显示子弹效果
		print("命中目标！造成",10, "点伤害")

# 显示子弹视觉效果
func show_bullet_effect():
	
	# 设置线段起点和终点（从角色到命中点）
	bullet_line.points = [
		Vector2.ZERO,  # 角色位置（本地坐标）
		current_target.global_position -global_position # 命中点（转换为本地坐标）
	]
	print("左边",current_target.global_position,global_position,current_target.global_position - global_position)
	# 显示子弹
	show_bullet = true
	bullet_timer = 0.0
	bullet_line.visible = true
	await get_tree().create_timer(0.2).timeout
	bullet_line.visible = false
	
